home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / ApiHooks 3.0 / MODAPIS.INC < prev    next >
Text File  |  2000-06-18  |  6KB  |  180 lines

  1. ;------------------------------------------------------------------------
  2. ;These exported functions and EAH* functions work identically. They
  3. ;prepare Block for remote execution then they call RemoteExecute.
  4. ;Following "Module APIs" work with remote code stored in ModWorks.inc.
  5.  
  6. ;ModModes:
  7.    IsModule     = 0
  8.    UnloadModule = 1
  9.    LoadCall     = 2
  10. ;------------------------------------------------------------------------
  11. ;Stubs:
  12.  
  13. PUBLIC       IsModuleLoadedA
  14. IFDEF NOOPT
  15. IsModuleLoadedA  PROC lpszDll, procID
  16.    sWin32    WorkModule, lpszDll, procID, 1, NULL, IsModule, FALSE
  17.    RET
  18. ELSE
  19. IsModuleLoadedA  PROC
  20.    PUSH      FALSE
  21.    JMP       WKMODI
  22. ENDIF
  23. IsModuleLoadedA  ENDP
  24. ;---------------------------------------------
  25. PUBLIC       IsModuleLoadedW
  26. IFDEF NOOPT
  27. IsModuleLoadedW  PROC lpszDll, procID
  28.    sWin32    WorkModule, lpszDll, procID, 1, NULL, IsModule, TRUE
  29.    RET
  30. ELSE
  31. IsModuleLoadedW  PROC
  32.    PUSH      TRUE
  33.   WKMODI::
  34.    sWin32    WorkModule, [ESP+24], [ESP+24], 1, NULL, IsModule
  35.    RETN      8
  36. ENDIF
  37. IsModuleLoadedW  ENDP
  38. ;------------------------------------------------------------------------
  39. PUBLIC       LoadAndCallA
  40. IFDEF NOOPT
  41. LoadAndCallA     PROC lpszDll, procID, NoTries, ApiName
  42.    sWin32    WorkModule, lpszDll, procID, NoTries, ApiName, LoadCall, FALSE
  43.    RET
  44. ELSE
  45. LoadAndCallA     PROC
  46.    PUSH      FALSE
  47.    JMP       WKMODL
  48. ENDIF
  49. LoadAndCallA     ENDP
  50. ;---------------------------------------------
  51. PUBLIC       LoadAndCallW
  52. IFDEF NOOPT
  53. LoadAndCallW     PROC lpszDll, procID, NoTries, ApiName
  54.    sWin32    WorkModule, lpszDll, procID, NoTries, ApiName, LoadCall, TRUE
  55.    RET
  56. ELSE
  57. LoadAndCallW     PROC
  58. ENDIF
  59.    PUSH      TRUE
  60.   WKMODL::
  61.    sWin32    WorkModule, [ESP+24], [ESP+24], [ESP+24], [ESP+24], LoadCall
  62.    RETN      16
  63. LoadAndCallW     ENDP
  64. ;------------------------------------------------------------------------
  65. PUBLIC       UnloadModuleA
  66. IFDEF NOOPT
  67. UnloadModuleA    PROC lpszDll, procID, NoTries
  68.    sWin32    WorkModule, lpszDll, procID, NoTries, NULL, UnloadModule, FALSE
  69.    RET
  70. ELSE
  71. UnloadModuleA    PROC
  72.    PUSH      FALSE
  73.    JMP       WKMODU
  74. ENDIF
  75. UnloadModuleA    ENDP
  76. ;---------------------------------------------
  77. PUBLIC       UnloadModuleW
  78. IFDEF NOOPT
  79. UnloadModuleW    PROC lpszDll, procID, NoTries
  80.    sWin32    WorkModule, lpszDll, procID, NoTries, NULL, UnloadModule, TRUE
  81.    RET
  82. ELSE
  83. UnloadModuleW    PROC
  84.    PUSH      TRUE
  85.   WKMODU::
  86.    sWin32    WorkModule, [ESP+24], [ESP+24], [ESP+24], NULL, UnloadModule
  87.    RETN      12
  88. ENDIF
  89. UnloadModuleW    ENDP
  90. ;------------------------------------------------------------------------
  91. ;Prepares remote code in ModWorks.inc for RemoteExecute.
  92.  
  93. WorkModule   PROC  USES EBX ESI EDI, lpszDll, procID, NoTries, CallApiName, ModMode, IsUnicode
  94.    sWin32    RemoteAlloc9x, UnloadSize, 0   ;allocate help memory in me
  95.    TEST      EAX, EAX
  96.    MOV       EDI, EAX
  97.    oMOV      EAX, ErrorException
  98.    JE        WMExit                   ;can't allocate
  99.    PUSH      EDI
  100.    oLEA      ESI, UnloadScout
  101.    oMOV      ECX, UnloadSize0/4
  102.    REP       MOVSD                    ;copy the remote code
  103.    POP       EBX
  104.    MOV       ESI, lpszDll
  105.  
  106.  ;copy module name then api name
  107.   NextRound:
  108.    CMP       IsUnicode, ECX
  109.    JE        CopyDll
  110.    iWin32    WideCharToMultiByte,  ECX, ECX, ESI, -1, EDI, MAX_PATH,  ECX, ECX
  111.    TEST      EAX, EAX
  112.    PUSH      EDI
  113.   WMErrExc:
  114.    POP       EDI
  115.    oMOV      EAX, ErrorException
  116.    JE        WMFreeExit
  117.    PUSH      EDI
  118.    JMP       WMGoOn
  119.   CopyDll:
  120.    PUSH      EDI
  121.    MOV       ECX, MAX_PATH
  122.   @@:
  123.    LODSB
  124.    STOSB
  125.    TEST      AL,  AL
  126.    JE        WMGoOn
  127.    DEC       ECX
  128.    JE        WMErrExc
  129.    JMP       @B
  130.   WMGoOn:
  131.    POP       EDI
  132.    SUB       ECX, ECX
  133.    ADD       EDI, MAX_PATH
  134.    MOV       ESI, CallApiName  ;what to call for LoadAndCall
  135.    CMP       ECX, ESI
  136.    MOV       CallApiName, ECX
  137.    JE        FinCopy           ;no CallApiName or was already copied
  138.    MOV       [EDI], ESI
  139.    CMP       ESI, 10000H       ;is it ordinal?
  140.    JB        FinCopy
  141.    MOV       [EDI], CL         ;no -> put zero at the end of the string
  142.    JMP       NextRound         ;and copy/convert CallApiName
  143.  
  144.   FinCopy:
  145.    MOV       ECX, ModMode
  146.    MOV       [EBX][_CallDllApi-UnloadScout], ESI
  147.    MOV       EAX, NoTries
  148.    JECXZ     GoIsModule
  149.  
  150. ;patch jumps and apis in remote code according to chosen function:
  151.  
  152.   GoUnloadModule:
  153.    DEC       ECX
  154.    JNE       GoLoadModule
  155.    MOV       BYTE PTR [EBX][_JEJL-UnloadScout], 7CH                   ;JE -> JL
  156.    MOV       BYTE PTR [EBX][FreeLib-UnloadScout-1], (FreeLib-FreeLib) ;JMP NextLoop -> JMP Freelib
  157.    JMP       @F
  158.  
  159.   GoLoadModule:
  160.    oMOV      [EBX][_DllOperation-UnloadScout], _LoadLibraryA                     ;GetModuleHandle -> LoadLibrary
  161.    MOV       WORD PTR [EBX][_JEJL-UnloadScout], 75H+ (NextLoop-ToCallProc) SHL 8 ;JE -> JNE
  162.    MOV       BYTE PTR [EBX][ToCallProc-UnloadScout+1], (CallProc-FreeLib)        ;JMP NextLoop -> JMP ToCallProc
  163.  
  164.   GoIsModule:
  165.   @@:
  166.    MOV       [EBX][_UnloadCount-UnloadScout], EAX  ;how many times to perform the module operation
  167.    sWin32    IsProcessInitializedOrNotNT, procID   ;determine ForceRT
  168.  
  169.   ;execute the code
  170.    LEA       ECX, [EBX][UnloadStop-UnloadScout]    ;locate CodeEnd
  171.    sWin32    RemoteExecute, procID, MODULE_TIME, EBX, UnloadSize, ECX, EAX
  172.  
  173.   WMFreeExit:
  174.    PUSH      EAX
  175.    sWin32    RemoteFree9x, EBX     ;free help memory in me
  176.    POP       EAX
  177.   WMExit:
  178.    RET
  179. WorkModule   ENDP
  180. ;=================================================================================